﻿using CommonModel.Util;
using System.Collections.Generic;
using System;

namespace GXRTBTC.PublicClassLibrary.Model
{
    /// <summary>
    /// 操作模型
    /// 下发控制、配置命令等
    /// </summary>
    public class OperateModel
    {
        public string oper_key { get; set; } = TransForm.DateTimeFormat(DateTime.Now, "yyyyMMddHHmmssfffffff");
        /// <summary>
        /// 操作类型，默认0
        /// 非零时，1-发往数字电视主控的测试操作
        /// </summary>
        public int oper_type { get; set; } = 0;
        /// <summary>
        /// 对应任务表task_test_info的ID
        /// </summary>
        public int task_id { get; set; } = 0;
        /// <summary>
        /// 操作生成节点
        /// </summary>
        public string create_node { get; set; }
        /// <summary>
        /// 操作下发采集节点
        /// </summary>
        public string send_node { get; set; }
        /// <summary>
        /// 位置ID，即工位号
        /// 下发的设备工位号
        /// </summary>
        public string position_id { get; set; }
        /// <summary>
        /// 设备信息
        /// 最终下发的设备信息
        /// 对应的不一定是position_id
        /// </summary>
        public DeviceInfo deviceInfo { get; set; }
        /// <summary>
        /// 参数 客户端的操作/设置数据
        /// </summary>
        //public List<Dictionary<string, string>> paras { get; set; }
        /// <summary>
        /// 命令参数值
        /// </summary>
        public Dictionary<string, string> parasValues { get; set; }
        /// <summary>
        /// 参数配置明细
        /// </summary>
        public Dictionary<string, Dictionary<string, object>> paraDetails { get; set; }
        /// <summary>
        /// 根据参数paras的node_name从redis匹配到的设置项，设置项用于生成下发命令
        /// </summary>
        //public Dictionary<string, Dictionary<string, string>> operateInfos { get; set; }
        ///// <summary>
        ///// 动作作类型 如开机、关机等
        ///// 暂定 1-开机 2-关机 3-倒天线 4-修复位 5-N+1开关 6-应急检修
        ///// </summary>
        //public int action_type { get; set; }
        ///// <summary>
        ///// 具体操作
        ///// action_type=1\2
        ///// 村级台站10W地面数字电视1+1主备机切控制器 0x0708 1-主机 2-备机
        ///// 村级台站20W模拟调频3+1主备机切控制器 0x0709 1-主机1 2-主机2 3-主机3 4-备机
        ///// action_type=3
        ///// 村级台站10W地面数字电视1+1主备机切控制器 0x0708 1-天线倒主 2-天线倒备
        ///// 村级台站20W模拟调频3+1主备机切控制器 0x0709 1-天线1倒主 2-天线2倒主 3-天线3倒主 4-天线1倒备 5-天线2倒备 6-天线3倒备
        ///// action_type=4
        ///// 村级台站10W地面数字电视1+1主备机切控制器 0x0708 1-主机已修复 2-备机已修复 3-主机未修复 4 备机未修复
        ///// 村级台站20W模拟调频3+1主备机切控制器 0x0709 1-主机1已修复 2-主机2已修复 3-主机3已修复 4-备机已修复 5-主机1未修复 6-主机2未修复 7-主机3未修复 8-备机未修复
        ///// action_type=5
        ///// 村级台站10W地面数字电视1+1主备机切控制器 0x0708 1-1+1开启 2-1+1关闭
        ///// 村级台站20W模拟调频3+1主备机切控制器 0x0709 1-3+1开启 2-3+1关闭
        ///// action_type=6
        ///// 村级台站10W地面数字电视1+1主备机切控制器 0x0708 1-应急检修开启 2-应急检修关闭
        ///// 村级台站20W模拟调频3+1主备机切控制器 0x0709 1-应急检修开启 2-应急检修关闭
        ///// </summary>
        //public int oper_type { get; set; }
        /// <summary>
        /// 操作员编码
        /// </summary>
        public string op_code { get; set; } = "default";
        public string op_name { get; set; } = "default";
        public string real_name { get; set; } = "default";
        public string template_id { get; set; } = "";
        /// <summary>
        /// 模板命令key，可唯一识别该条命令的一个字符串
        /// </summary>
        public string template_key { get; set; } = "";
        /// <summary>
        /// 根据模板命令key，生成的值
        /// </summary>
        public string template_key_val { get; set; } = "";
        public string template_memo { get; set; } = "";
        /// <summary>
        /// 操作类型
        /// 1-控制下发
        /// 2-配置下发
        /// </summary>
        public int op_type { get; set; } = 0;
        /// <summary>
        /// 频率参数，写日志时用
        /// </summary>
        public string frequency { get; set; } = "";
        public string op_ipaddr { get; set; } = "127.0.0.1";
        /// <summary>
        /// 操作时间
        /// </summary>
        public DateTime op_time { get; set; } = DateTime.Now;
        /// <summary>
        /// 生成命令提交Kafka后，Kafka记录的时间
        /// </summary>
        //public DateTime issuekafka_time { get; set; }
        /// <summary>
        /// 从Kafka读取到数据的时间
        /// </summary>
        //public DateTime issueget_time { get; set; }
        /// <summary>
        /// issue服务生成命令时间
        /// </summary>
        public DateTime create_time { get; set; }
        /// <summary>
        /// 生成后提交Kafka的时间
        /// </summary>
        public DateTime issueput_time { get; set; }
        /// <summary>
        /// 发送时从Kafka读取到的时间
        /// </summary>
        public DateTime sendkafka_time { get; set; }
        /// <summary>
        /// 采集服务下发时间
        /// </summary>
        public DateTime send_time { get; set; }
        /// <summary>
        /// 下发后，收到回复数据的时间
        /// </summary>
        public DateTime rcv_time { get; set; }
        /// <summary>
        /// 收到回复数据的key
        /// </summary>
        public string pack_key { get; set; }
        public PacketInfo packetInfo { get; set; }
        /// <summary>
        /// 操作模型ID
        /// </summary>
        public string operate_model_id { get; set; }
        /// <summary>
        /// 操作名称
        /// </summary>
        public string cmd_name { get; set; }
        /// <summary>
        /// 命令模板模型
        /// </summary>
        public string cmd_temp { get; set; }
        /// <summary>
        /// 命令模板对应的参数
        /// </summary>
        public string cmd_paras { get; set; }
        /// <summary>
        /// 命令
        /// </summary>
        public string cmd { get; set; }
        public string logInfo { get; set; } = "";
    }
}
